package com.bitoon.basketdudes.jpa;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

/**
 *
 * @author Alberto Piquer
 */
@Entity
@Table(name = "jugador", schema="basket")
@NamedQueries({
    @NamedQuery(name = "Jugador.findAll"            , query = "SELECT j FROM Jugador j"),
    @NamedQuery(name = "Jugador.findById"           , query = "SELECT j FROM Jugador j WHERE j.id = :id"),
    @NamedQuery(name = "Jugador.findByNivel"        , query = "SELECT j FROM Jugador j WHERE j.nivel = :nivel"),
/*    
    @NamedQuery(name = "Jugador.findByExperiencia"  , query = "SELECT j FROM Jugador j WHERE j.experiencia = :experiencia"),
    @NamedQuery(name = "Jugador.findByFAlta"        , query = "SELECT j FROM Jugador j WHERE j.fAlta = :fAlta"),
    @NamedQuery(name = "Jugador.findByFAltaEquipo"  , query = "SELECT j FROM Jugador j WHERE j.fAltaEquipo = :fAltaEquipo"),
    @NamedQuery(name = "Jugador.findByPrecioCompra" , query = "SELECT j FROM Jugador j WHERE j.precioCompra = :precioCompra"),
    @NamedQuery(name = "Jugador.findByPuntosCompra" , query = "SELECT j FROM Jugador j WHERE j.puntosCompra = :puntosCompra"),
    @NamedQuery(name = "Jugador.findByValoracion"   , query = "SELECT j FROM Jugador j WHERE j.valoracion = :valoracion"),
    @NamedQuery(name = "Jugador.findByT1"           , query = "SELECT j FROM Jugador j WHERE j.t1 = :t1"),
    @NamedQuery(name = "Jugador.findByT2"           , query = "SELECT j FROM Jugador j WHERE j.t2 = :t2"),
    @NamedQuery(name = "Jugador.findByT3"           , query = "SELECT j FROM Jugador j WHERE j.t3 = :t3"),
    @NamedQuery(name = "Jugador.findByAgresividad"  , query = "SELECT j FROM Jugador j WHERE j.agresividad = :agresividad"),
    @NamedQuery(name = "Jugador.findByDriblin"      , query = "SELECT j FROM Jugador j WHERE j.driblin = :driblin"),
    @NamedQuery(name = "Jugador.findByPase"         , query = "SELECT j FROM Jugador j WHERE j.pase = :pase"),
    @NamedQuery(name = "Jugador.findByReboteAtaque" , query = "SELECT j FROM Jugador j WHERE j.reboteAtaque = :reboteAtaque"),
    @NamedQuery(name = "Jugador.findByReboteDefensa", query = "SELECT j FROM Jugador j WHERE j.reboteDefensa = :reboteDefensa"),
    @NamedQuery(name = "Jugador.findByDefensa"      , query = "SELECT j FROM Jugador j WHERE j.defensa = :defensa"),
    @NamedQuery(name = "Jugador.findByRobo"         , query = "SELECT j FROM Jugador j WHERE j.robo = :robo"),
    @NamedQuery(name = "Jugador.findByTapon"        , query = "SELECT j FROM Jugador j WHERE j.tapon = :tapon"),
    @NamedQuery(name = "Jugador.findByResistencia"  , query = "SELECT j FROM Jugador j WHERE j.resistencia = :resistencia"),
    @NamedQuery(name = "Jugador.findByVelocidad"    , query = "SELECT j FROM Jugador j WHERE j.velocidad = :velocidad"),
    @NamedQuery(name = "Jugador.findBySprint"       , query = "SELECT j FROM Jugador j WHERE j.sprint = :sprint"),
    @NamedQuery(name = "Jugador.findByTeamwork"     , query = "SELECT j FROM Jugador j WHERE j.teamwork = :teamwork"),
*/
    @NamedQuery(name = "Jugador.findByPowerPlay"    , query = "SELECT j FROM Jugador j WHERE j.equipo.id = :equipo order by j.nivel desc limit 5")

//    ,@NamedQuery(name = "Jugador.findByEquipoIdModeloId", query = "SELECT j FROM Jugador j WHERE j.Equipo.id = :equipoId and j.MJugador.id = :mJugadorId")
})
/*
@NamedNativeQueries({
@NamedNativeQuery(name = "Jugador.findByEquipoIdModeloId", query = "SELECT * FROM Jugador where  equipo_id=:equipoId and m_jugador_id = :mJugadorId ")
})
*/
public class Jugador implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @SequenceGenerator(name="jugador_id_generator", sequenceName="basket.jugador_id_seq",allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="jugador_id_generator")
    @Basic(optional=false)
    private Integer id;

    @Basic(optional = false)
    @Column(name = "nivel")
    private short nivel;
    @Basic(optional = false)
    @Column(name = "experiencia")
    private int experiencia;
    @Basic(optional = false)
    @Column(name = "f_alta")
    @Temporal(TemporalType.DATE)
    private Date fAlta;
    @Basic(optional = false)
    @Column(name = "f_alta_equipo")
    @Temporal(TemporalType.DATE)
    private Date fAltaEquipo;
    @Basic(optional = false)
    @Column(name = "precio_compra")
    private float precioCompra;
    @Basic(optional = false)
    @Column(name = "puntos_compra")
    private int puntosCompra;
    @Basic(optional = false)
    @Column(name = "valoracion")
    private float valoracion;
    @Column(name = "t1")
    private short t1;
    @Column(name = "t2")
    private short t2;
    @Column(name = "t3")
    private short t3;
    @Column(name = "agresividad")
    private short agresividad;
    @Column(name = "driblin")
    private short driblin;
    @Column(name = "pase")
    private short pase;
    @Column(name = "rebote_ataque")
    private short reboteAtaque;
    @Column(name = "rebote_defensa")
    private short reboteDefensa;
    @Column(name = "defensa")
    private short defensa;
    @Column(name = "robo")
    private short robo;
    @Column(name = "tapon")
    private short tapon;
    @Column(name = "resistencia")
    private short resistencia;
    @Column(name = "velocidad")
    private short velocidad;
    @Column(name = "sprint")
    private short sprint;
    @Column(name = "teamwork")
    private short teamwork;
    @Column(name = "estado")
    private short estado;

    // BASICAS
    @Column(name = "b_t1")
    private short   bT1;
    @Column(name = "b_t2")
    private short   bT2;
    @Column(name = "b_t3")
    private short   bT3;
    @Column(name = "b_agresividad")
    private short   bAgresividad;
    @Column(name = "b_driblin")
    private short   bDriblin;
    @Column(name = "b_pase")
    private short   bPase;
    @Column(name = "b_rebote_ataque")
    private short   bReboteAtaque;
    @Column(name = "b_rebote_defensa")
    private short   bReboteDefensa;
    @Column(name = "b_defensa")
    private short   bDefensa;
    @Column(name = "b_robo")
    private short   bRobo;
    @Column(name = "b_tapon")
    private short   bTapon;
    @Column(name = "b_resistencia")
    private short   bResistencia;
    @Column(name = "b_velocidad")
    private short   bVelocidad;
    @Column(name = "b_sprint")
    private short   bSprint;
    @Column(name = "b_teamwork")
    private short   bTeamwork;

    // talento
    @Column(name = "talento1", nullable=true)
    @Basic(optional=true)
    private Short talento1 = 0;
    @Column(name = "talento2", nullable=true)
    @Basic(optional=true)
    private Short talento2 = 0;
    @Column(name = "talento3", nullable=true)
    @Basic(optional=true)
    private Short   talento3 = 0;

    @JoinColumn(name = "m_jugador_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private MJugador mJugador;
    @JoinColumn(name = "equipo_id", referencedColumnName = "id")
    @ManyToOne
    private Equipo equipo;

    @Column(name = "trait1_id", nullable=true)
    @Basic(optional=true)
    private Short trait1;
    
    @Column(name = "trait2_id", nullable=true)
    @Basic(optional=true)
    private Short trait2;
    
    
//    @OneToMany(cascade = CascadeType.ALL, mappedBy = "jugador_id", fetch = FetchType.LAZY)
//    private Set<Ropa> ropaSet;

//    @OneToMany( targetEntity=com.bitoon.basketdudes.jpa.RopaJugador.class, mappedBy = "Jugador", fetch = FetchType.LAZY)
//    private Set<RopaJugador> ropaSet;

    /*
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "jugador")
    private List<Plantilla> plantillaList;
    */
    
    public Jugador() {

        this.fAlta = new Date();
        this.fAltaEquipo = new Date();
        this.precioCompra = 0;
        this.puntosCompra = 0;
        this.valoracion = 0;

        ResetRopa();
        ResetBase();
    }

    public void ResetRopa() {
        this.t1 = 0;
        this.t2 = 0;
        this.t3 = 0;
        this.agresividad = 0;
        this.driblin = 0;
        this.pase = 0;
        this.reboteAtaque = 0;
        this.defensa = 0;
        this.robo = 0;
        this.tapon = 0;
        this.reboteDefensa = 0;
        this.resistencia = 0;
        this.velocidad = 0;
        this.teamwork = 0;
        this.sprint = 0;
    }

    public void ResetBase() {
        // Inicializamos las caracteristicas base
        this.bT1 = 0;
        this.bT2 = 0;
        this.bT3 = 0;
        this.bAgresividad = 0;
        this.bDriblin = 0;
        this.bPase = 0;
        this.bReboteAtaque = 0;
        this.bDefensa = 0;
        this.bRobo = 0;
        this.bTapon = 0;
        this.bReboteDefensa = 0;
        this.bResistencia = 0;
        this.bVelocidad = 0;
        this.bTeamwork = 0;
        this.bSprint = 0;
    }

    /*
    public Jugador(Integer id) {
        this.id = id;
    }

    public Jugador(Integer id, short nivel, int experiencia, Date fAlta, Date fAltaEquipo, BigDecimal precioCompra, int puntosCompra, short powerplay) {
        this.id = id;
        this.nivel = nivel;
        this.experiencia = experiencia;
        this.fAlta = fAlta;
        this.fAltaEquipo = fAltaEquipo;
        this.precioCompra = precioCompra;
        this.puntosCompra = puntosCompra;
        this.powerplay = powerplay;
    }
     *
     */

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public short getNivel() {
        return nivel;
    }

    public void setNivel(short nivel) {
        this.nivel = nivel;
    }

    public int getExperiencia() {
        return experiencia;
    }

    public void setExperiencia(int experiencia) {
        this.experiencia = experiencia;
    }

    public Date getFAlta() {
        return fAlta;
    }

    public void setFAlta(Date fAlta) {
        this.fAlta = fAlta;
    }

    public Date getFAltaEquipo() {
        return fAltaEquipo;
    }

    public void setFAltaEquipo(Date fAltaEquipo) {
        this.fAltaEquipo = fAltaEquipo;
    }

    public float getPrecioCompra() {
        return precioCompra;
    }

    public void setPrecioCompra(float precioCompra) {
        this.precioCompra = precioCompra;
    }

    public int getPuntosCompra() {
        return puntosCompra;
    }

    public void setPuntosCompra(int puntosCompra) {
        this.puntosCompra = puntosCompra;
    }

    public float getValoracion() {
        return valoracion;
    }

    public void setValoracion(float valoracion) {
        this.valoracion = valoracion;
    }

    public short getT1() {
        return t1;
    }

    public void setT1(short t1) {
        this.t1 = t1;
    }

    public short getT2() {
        return t2;
    }

    public void setT2(short t2) {
        this.t2 = t2;
    }

    public short getT3() {
        return t3;
    }

    public void setT3(short t3) {
        this.t3 = t3;
    }

    public short getAgresividad() {
        return agresividad;
    }

    public void setAgresividad(short agresividad) {
        this.agresividad = agresividad;
    }

    public short getDriblin() {
        return driblin;
    }

    public void setDriblin(short driblin) {
        this.driblin = driblin;
    }

    public short getPase() {
        return pase;
    }

    public void setPase(short pase) {
        this.pase = pase;
    }

    public short getReboteAtaque() {
        return reboteAtaque;
    }

    public void setReboteAtaque(short reboteAtaque) {
        this.reboteAtaque = reboteAtaque;
    }

    public short getReboteDefensa() {
        return reboteDefensa;
    }

    public void setReboteDefensa(short reboteDefensa) {
        this.reboteDefensa = reboteDefensa;
    }

    public short getDefensa() {
        return defensa;
    }

    public void setDefensa(short defensa) {
        this.defensa = defensa;
    }

    public short getRobo() {
        return robo;
    }

    public void setRobo(short robo) {
        this.robo = robo;
    }

    public short getTapon() {
        return tapon;
    }

    public void setTapon(short tapon) {
        this.tapon = tapon;
    }

    public short getResistencia() {
        return resistencia;
    }

    public void setResistencia(short resistencia) {
        this.resistencia = resistencia;
    }

    public short getVelocidad() {
        return velocidad;
    }

    public void setVelocidad(short velocidad) {
        this.velocidad = velocidad;
    }

    public short getSprint() {
        return sprint;
    }

    public void setSprint(short sprint) {
        this.sprint = sprint;
    }

    public short getTeamwork() {
        return teamwork;
    }

    public void setTeamwork(short teamwork) {
        this.teamwork = teamwork;
    }

    public MJugador getMJugador() {
        return mJugador;
    }

    public void setMJugador(MJugador mJugador) {
        this.mJugador = mJugador;
    }

    public Equipo getEquipo() {
        return equipo;
    }

    public void setEquipo(Equipo equipo) {
        this.equipo = equipo;
    }

    /* -----------------------------------
            BASICAS
    --------------------------------------- */
    public short getBT1() {
        return bT1;
    }

    public void setBT1(short p_t1) {
        this.bT1 = p_t1;
    }

    public short getBT2() {
        return bT2;
    }

    public void setBT2(short p_t2) {
        this.bT2 = p_t2;
    }

    public short getBT3() {
        return bT3;
    }

    public void setBT3(short p_t3) {
        this.bT3 = p_t3;
    }

    public short getBAgresividad() {
        return bAgresividad;
    }

    public void setBAgresividad(short p_agresividad) {
        this.bAgresividad = p_agresividad;
    }

    public short getBDriblin() {
        return bDriblin;
    }

    public void setBDriblin(short p_driblin) {
        this.bDriblin = p_driblin;
    }

    public short getBPase() {
        return bPase;
    }

    public void setBPase(short p_pase) {
        this.bPase = p_pase;
    }

    public short getBReboteAtaque() {
        return bReboteAtaque;
    }

    public void setBReboteAtaque(short p_reboteAtaque) {
        this.bReboteAtaque = p_reboteAtaque;
    }

    public short getBReboteDefensa() {
        return bReboteDefensa;
    }

    public void setBReboteDefensa(short p_reboteDefensa) {
        this.bReboteDefensa = p_reboteDefensa;
    }

    public short getBDefensa() {
        return bDefensa;
    }

    public void setBDefensa(short p_defensa) {
        this.bDefensa = p_defensa;
    }

    public short getBRobo() {
        return bRobo;
    }

    public void setBRobo(short p_robo) {
        this.bRobo = p_robo;
    }

    public short getBTapon() {
        return bTapon;
    }

    public void setBTapon(short p_tapon) {
        this.bTapon = p_tapon;
    }

    public short getBResistencia() {
        return bResistencia;
    }

    public void setBResistencia(short p_resistencia) {
        this.bResistencia = p_resistencia;
    }

    public short getBVelocidad() {
        return bVelocidad;
    }

    public void setBVelocidad(short p_velocidad) {
        this.bVelocidad = p_velocidad;
    }

    public short getBSprint() {
        return bSprint;
    }

    public void setBSprint(short p_sprint) {
        this.bSprint = p_sprint;
    }

    public short getBTeamwork() {
        return bTeamwork;
    }

    public void setBTeamwork(short p_teamwork) {
        this.bTeamwork = p_teamwork;
    }

    public java.lang.Short getTalento1() {
        return this.talento1;
    }

    public void setTalento1(java.lang.Short valor) {
        this.talento1 = valor;
    }

    public java.lang.Short getTalento2() {
        return this.talento2;
    }

    public void setTalento2(java.lang.Short valor) {
        this.talento2 = valor;
    }
    
    public java.lang.Short getTalento3() {
        return this.talento3;
    }

    public void setTalento3(java.lang.Short valor) {
        this.talento3 = valor;
    }

    public java.lang.Short getTrait1() {
        return this.trait1;
    }

    public java.lang.Short getTrait2() {
        return this.trait2;
    }
    
    public void setTrait1(java.lang.Short valor) {
        this.trait1 = valor;
    }

    public void setTrait2(java.lang.Short valor) {
        this.trait2 = valor;
    }   
    
    
    
    public short getEstado() {
        return this.estado;
    }

    public void setEstado(short valor) {
        this.estado = valor;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Jugador)) {
            return false;
        }
        Jugador other = (Jugador) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.bitoon.basketdudes.jpa.Jugador[id=" + id + "]";
    }


    public void recalculaValoracion () {
        float total = 0;

        total += this.agresividad;
        total += this.defensa;
        total += this.driblin;
        total += this.pase;
        total += this.reboteAtaque;

        total += this.reboteDefensa;
        total += this.resistencia;
        total += this.robo;
        total += this.sprint;
        total += this.t1;

        total += this.t2;
        total += this.t3;
        total += this.tapon;
        total += this.teamwork;
        total += this.velocidad;

        total += this.bAgresividad;
        total += this.bDefensa;
        total += this.bDriblin;
        total += this.bPase;
        total += this.bReboteAtaque;

        total += this.bReboteDefensa;
        total += this.bResistencia;
        total += this.bRobo;
        total += this.bSprint;
        total += this.bT1;

        total += this.bT2;
        total += this.bT3;
        total += this.bTapon;
        total += this.bTeamwork;
        total += this.bVelocidad;

        this.valoracion = total / 15;

    }


}
